﻿#include <stdio.h>
#include <iostream>
#include <Windows.h>
#include <string>
#include "tinyxml2.h"
using namespace std;
using namespace tinyxml2;
void createXML()
{
	//声明XMLDocument变量
	tinyxml2::XMLDocument doc;
	//声明头部
	XMLDeclaration* declaration = doc.NewDeclaration();
	//添加xml头部声明
	doc.InsertFirstChild(declaration);
	//创建第一个xml元素
	XMLElement* root = doc.NewElement("Root");
	//添加第一个xml元素，需要添加到文档XMLDocument上
	doc.InsertEndChild(root);
	//创建第二个xml元素
	XMLElement* head = doc.NewElement("head");
	//元素的属性 id,属性值为1
	head->SetAttribute("id", 1);
	//元素的属性 name,属性值为alisy
	head->SetAttribute("name", "alisy");
	//设置元素的文本内容，以下两种任选一个
	head->InsertFirstChild(doc.NewText("MD5"));
	head->InsertNewText("123");
	//将节点添加到root下作为root的子节点，同理可以添加head的子节点
	root->InsertEndChild(head);
	//声明第二个一级节点
	XMLElement* root1 = doc.NewElement("Root1");
	//添加第二个一级节点
	doc.InsertEndChild(root1);
	root1->SetAttribute("id", 2002);
	doc.SaveFile("demoXml.xml");
}
void readXML()
{
	tinyxml2::XMLDocument doc;
	//读取xml文件
	doc.LoadFile("demoXml.xml");
	//判断是否读取成功
	if (doc.Error())
	{
		printf("Load XML failed!");
		return;
	}
	//获取头节点
	XMLElement* root = doc.RootElement();
	if (root->NextSiblingElement() != NULL)
	{
		//头结点的兄弟节点
		XMLElement* root1 = root->NextSiblingElement();
		//获取节点的id的属性
		printf("第二个一级节点%s\n", root1->Attribute("id"));
	}

	/*char rootStr[100];
	sprintf(rootStr,root->GetText());*/
	if (root->GetText() != NULL)
	{
		string rootStr = root->GetText();
		printf("第一个一级节点的内容%s\n", rootStr);
	}
	XMLElement* head = root->FirstChildElement("head");
	//获取节点的内容
	printf("head的内容%s\n", head->GetText());
	printf("head的id%s\n", head->Attribute("id"));
	printf("head的name%s\n", head->Attribute("name"));


	system("pause");

}

void main()
{
	createXML();
	readXML();
}